package domain;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;

import java.io.File;
import java.io.FileWriter;
import java.util.Date;

/*
 JSON数据和java对象的相互转换
    * JSON解析器:
       常见的解析器: JsonLib  Gson  fastjson jackson

    1: JSON转为java对象

    2: Java对象转换为JSON
       1: 使用步骤:
          1: 导入jackson的相关jar包
          2: 创建jackson核心对象  ObjectMapper
          3: 调用ObjectMapper的相关方法进行转换


*/
public class JacksonTest {

    //java对象转为JSON字符串
    @Test
    public void test1() throws Exception {
        // 1. 创建person对象
        person aa = new person();
        aa.setName("张三");
        aa.setAge(13);
        aa.setGender("男");

        // 2. 创建Jackson的核心对象  ObjectMapper
        ObjectMapper bb = new ObjectMapper();
        // 3. 转换
        /*
         1.  转换方法:
             writeValue(参数1,obj):
                参数1的取值:
                   File: 将obj对象转换为JSON字符串,并保存到指定的文件中
                   Writer: 将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
                   OutputStream: 将obj对象转换为json字符串,并 将json数据填充到字节输出流中
             writeValueAsString(obj):
                 * 此方法只需要传递一个参数,该方法能将传递的参数java对象转换为json对象
          2.  注解:
             1: @JsonIgnore: 忽略属性.
             2: @JsonFormat: 属性值的格式化

        */
        String cc = bb.writeValueAsString(aa);
        //System.out.println(cc);//{"name":"张三","age":13,"gender":"男"}

        //writrValue,将数据写到 d://a.txt文件中
        //bb.writeValue(new File("d://a.txt"),aa);

        //writeValue,将数据关联到Writer中
        bb.writeValue(new FileWriter("d://b.txt"), aa);//参数中传字节流和字符流都可以

    }

    @Test
    public void test2() throws Exception {
        // 1. 创建person对象
        person aa = new person();
        aa.setName("张三");
        aa.setAge(13);
        aa.setGender("男");
        aa.setBirthday(new Date());

        //转换
        ObjectMapper bb=new ObjectMapper();
        String cc = bb.writeValueAsString(aa);
        System.out.println(cc);  //{"name":"张三","age":13,"gender":"男","birthday":"2021-04-26"}

    }
}
